package cn.mes.module.mes.service.baseworkplan;

import java.util.*;
import javax.validation.*;
import cn.mes.module.mes.controller.admin.baseworkplan.vo.*;
import cn.mes.module.mes.dal.dataobject.baseworkplan.BaseWorkPlanDO;
import cn.mes.module.mes.dal.dataobject.baseworkplan.BaseBomChildDO;
import cn.mes.framework.common.pojo.PageResult;
import cn.mes.framework.common.pojo.PageParam;

/**
 * 任务单信息 Service 接口
 *
 * @author 游创
 */
public interface BaseWorkPlanService {

    /**
     * 创建任务单信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createBaseWorkPlan(@Valid BaseWorkPlanSaveReqVO createReqVO);

    boolean createBaseWorkPlan(@Valid BaseWorkPlanDO baseWorkPlanDO);


    /**
     * 创建任务单信息
     *
     * @param baseWorkPlanDOList 创建信息
     * @return 编号
     */
    boolean createBaseWorkPlanBatch(@Valid List<BaseWorkPlanDO> baseWorkPlanDOList);

    /**
     * 更新任务单信息
     *
     * @param updateReqVO 更新信息
     */
    void updateBaseWorkPlan(@Valid BaseWorkPlanSaveReqVO updateReqVO);

    /**
     * 删除任务单信息
     *
     * @param id 编号
     */
    void deleteBaseWorkPlan(String id);

    /**
     * 获得任务单信息
     *
     * @param id 编号
     * @return 任务单信息
     */
    BaseWorkPlanDO getBaseWorkPlan(String id);

    /**
     * 获得任务单信息分页
     *
     * @param pageReqVO 分页查询
     * @return 任务单信息分页
     */
    PageResult<BaseWorkPlanDO> getBaseWorkPlanPage(BaseWorkPlanPageReqVO pageReqVO);

    // ==================== 子表（投料单详细信息） ====================

    /**
     * 获得投料单详细信息分页
     *
     * @param pageReqVO 分页查询
     * @param workPlanInterId 投料单内码
     * @return 投料单详细信息分页
     */
    PageResult<BaseBomChildDO> getBaseBomChildPage(PageParam pageReqVO, String workPlanInterId);

    /**
     * 创建投料单详细信息
     *
     * @param baseBomChild 创建信息
     * @return 编号
     */
    String createBaseBomChild(@Valid BaseBomChildDO baseBomChild);

    boolean createBaseBomChildBatch(@Valid List<BaseBomChildDO> baseBomChildDOList);
    /**
     * 更新投料单详细信息
     *
     * @param baseBomChild 更新信息
     */
    void updateBaseBomChild(@Valid BaseBomChildDO baseBomChild);

    /**
     * 删除投料单详细信息
     *
     * @param id 编号
     */
    void deleteBaseBomChild(String id);

	/**
	 * 获得投料单详细信息
	 *
	 * @param id 编号
     * @return 投料单详细信息
	 */
    BaseBomChildDO getBaseBomChild(String id);

}